package com.amethyst.mybatisplus.mapper;

import com.amethyst.mybatisplus.model.User;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author Amethyst
 * @date 2021/11/2
 */
@Mapper
public interface UserMapper extends BaseMapper<User> {

    /**
     * 原生sql
     *
     * @return List<User>
     */
    @Select("SELECT * FROM mp_user")
    List<User> selectRaw();

    /**
     * sql 中不写where关键字，且固定使用${ew.customSqlSegment}
     *
     * @param wrapper wrapper
     * @return List<User>
     */
    @Select("SELECT * FROM mp_user ${ew.customSqlSegment}")
    List<User> findAllByWrapper(@Param(Constants.WRAPPER) Wrapper<User> wrapper);

    /**
     * 自定义分页查询（xml形式）
     *
     * @param page page
     * @param wrapper wrapper
     * @return Page<User>
     */
    Page<User> findByPage(Page<User> page, @Param(Constants.WRAPPER) Wrapper<User> wrapper);

    /**
     * 自定义分页查询（注解形式）
     *
     * @param page page
     * @param wrapper wrapper
     * @return Page<User>
     */
    @Select("SELECT * FROM mp_user ${ew.customSqlSegment}")
    Page<User> selectUserPage(Page<User> page, @Param(Constants.WRAPPER) Wrapper<User> wrapper);

}
